/// 在位域中插入一个新值
///
/// Value被掩码为width位并插入origin。
#[inline]
pub fn bf_insert(orig: usize, bit: usize, width: usize, value: usize) -> usize {
    let mask = (1 << width) - 1;
    orig & !(mask << bit) | ((value & mask) << bit)
}

/// 从位域中提取一个值
///
/// 从位偏移bit中提取width位，并将其移位到位0
#[inline]
pub fn bf_extract(orig: usize, bit: usize, width: usize) -> usize {
    let mask = (1 << width) - 1;
    (orig >> bit) & mask
}
